#ifndef __ANO_INIT_
#define __ANO_INIT_

#include "main.h"
#include "stdint.h"
#include "string.h"
#include "ano.h"
/***
 * 本文件是对匿名上位机的一些公用的ID与硬件设置的信息
 * 底层接口的配置文件
 * ***/

/***定义所用的发送串口***/
#define ANO_UART huart2 //定义串口
#define ANO_UART_DMA hdma_usart2_rx //定义DMA句柄

/**以下部分不可修改**/
#define ANO_True (1)
#define ANO_False (0)
/**
 * @brief 这里是匿名设备的硬件地址定义区域
 */
#define USER_Custom_ID (0x01) // Between 0x01 and 0xc7; 推荐0x01-0x20给设备的不同端口
/*** 预留 [0xc8-0xfe] 地址段给匿名设备 ***/
#define ANO_Fly_Ctrl (0xdc)           // 匿名飞控
#define ANO_Optical_Flow (0xde)       // 匿名光流
#define ANO_Data_Transmission (0xe6)  // 匿名数传
#define ANO_Protocol_Simulator (0xfd) // 匿名协议模拟器
#define ANO_Upper_Computer (0xfe)     // 匿名上位机
#define ANO_Broadcast_Data (0xff)     // 广播数据
/*** ############ Hard ID Define End ############ ***/


#define BLaddr (0x0803b000)//BOOTLOADER地址


/*不定字长数据接收缓存区长度定义*/
#define MAX_RX_LEN (256U) // 一次性可以接受的数据字节长度，你可以自己定义。U是Unsigned的意思。
#define MAX_TX_LEN (256U) // 一次性可以发送的数据字节长度，你可以自己定义。

/*******全局变量声明 接受缓存区*******/
extern uint8_t USART2_TX_BUF[MAX_TX_LEN]; // my_printf的发送缓冲，下文详述其作用。
extern volatile uint8_t USART1_TX_FLAG;   // USART发送标志，启动发送时置1，加volatile防编译器优化
extern uint8_t u1rxbuf[MAX_RX_LEN];       // 数据接收缓冲1
extern uint8_t u2rxbuf[MAX_RX_LEN];       // 数据接收缓冲2
extern uint8_t WhichBufIsReady;           // 双缓存指示器。
// 0:u1rxbuf 被DMA占用接收,  u2rxbuf 可以读取.
// 0:u2rxbuf 被DMA占用接收,  u1rxbuf 可以读取.
extern uint8_t *p_IsOK;        // 指针——指向可以读取的那个缓冲
extern uint8_t *p_IsToReceive; // 指针——指向被占用的那个缓冲

/***函数声明***/
void ano_init(void);
int32_t rev_dma_data(void);
void boot_jump_to_run(uint32_t addr);
#endif